package com.wonders.controller;

import com.wonders.exception.CustomerException;
import com.wonders.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author huangweiyue
 * @description 用来测试事务
 * @date Created in 2021-03-16
 */
@RestController
@RequestMapping("/user")
public class TransactionalController {
    @Autowired
    private UserInfoService userInfoService;

    /**
     * 测试@Transication注解生效场景
     * http://127.0.0.1:8080/user/saveUser
     *
     * @return
     */
    @RequestMapping("/saveUser")
    public String saveUser() throws CustomerException {
        userInfoService.insertOne();
        return "success";
    }

    //TODO 测试事务的传播级别 隔离行为

    /**
     *参考： https://zhuanlan.zhihu.com/p/148504094 用的时候查一下
     REQUIRED(0),支持当事务，如果当前没有事务，就新建一个事务，这是最常见的选择
     SUPPORTS(1),支持当前事务，如果当前没有事务，就以非事务方式运行
     MANDATORY(2),支持当前事务，如果当前没有事务，就抛出异常
     REQUIRES_NEW(3),新建事务，如果当前存在事务，把当前事务挂起
     NOT_SUPPORTED(4),以非事务方式执行操作，如果当前存在事务，就把当前事务挂起
     NEVER(5),以非事务方式运行，如果当前存在事务，则抛出异常
     NESTED(6);如果当前存在事务，则嵌套事务内执行。如果当前没有事务，则与REQUIRED类似的操作
     */
}
